<?php
namespace app\index\controller;

use app\common\controller\Base;
use app\index\model\Img;

/**
 * 文件上传
 */
class Upload extends Base
{

    /**
     * 控制器初始化
     * @return   void
     */
    public function _initialize()
    {
        //基类授权
        //
        parent::_initialize();
    }
    /**
     * 文件上传
     *
     * @param    string $path 上传文件路径
     * @return   void
     */
    public function upload($path)
    {

        try {

            //目录
            $img['dir'] = $path;

            // 获取表单上传文件
            $file = request()->file('file');

            // 移到框架静态文件目录/public/static/ 目录下
            if ($file) {

                $path = (ROOT_PATH . 'public' . DS . 'static' . DS . 'img' . DS . $img['dir']);

                chmod($path, 0777);

                $info = $file->validate(['size' => 2097152, 'ext' => 'jpg,png,gif'])
                    ->move($path, false);

                if ($info) {

                    //删除同名数据库图像记录
                    $model = new Img();
                    $file  = $model->where('filename', $info->getFilename())
                        ->delete();

                    //成功上传后 获取上传信息
                    $imgInfo = $info->getInfo();

                    $img['ext']      = $info->getExtension();
                    $img['filesize'] = $imgInfo['size'];
                    $img['filename'] = $info->getFilename();

                    $imgSize            = getimagesize($info->getPathname());
                    $img['tag']         = input('tag');
                    $img['path']        = $path;
                    $img['width']       = $imgSize[0];
                    $img['height']      = $imgSize[1];
                    $img['lastmodtime'] = date('Y-m-d H:i:s', filemtime($info->getPathname()));

                    $image = \think\Image::open($info->getPathname());

                    // 按照原图的比例生成一个最大为60*30的缩略图并原名保存
                    $image->thumb(60, 30, \think\Image::THUMB_FILLED)->save('./static/img/' . $img['dir'] . '/thumb/' . $info->getFilename());

                    // 过滤Img数组中的非数据表字段数据,并保存新记录
                    $model = new Img($img);
                    $model->allowField(true)->save();

                    $output['success'] = true;
                    $output['msg']     = '上传成功';
                    $output['data']    = $img;

                    echo json_encode($output);

                } else {
                    //上传失败获取错误信息
                    echo $file->getError();
                }
            }
        } catch (\Exception $e) {
            throw new \think\Exception($e->getMessage());
        }
    }
    /**
     * [uploadTag description]
     * @DateTime 2017-11-21
     * @return   [type]
     */
    public function uploadTag()
    {
        $this->upload('tag');
    }
    /**
     * [uploadTag description]
     * @DateTime 2017-11-21
     * @return   [type]
     */
    public function uploadNotice()
    {
        $this->upload('notice');
    }
}
